package com.example.quartzdemo.springTask;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;

/**
 * TODO     默认情况下，@Scheduled任务都在Spring创建的大小为1的默认线程池中执行，你可以通过在加了@Scheduled注解的方法里加上下面这段代码来验证。
 *              logger.info("Current Thread : {}", Thread.currentThread().getName());
 *          你会发现加上上面这段代码的定时任务，每次运行都会输出：
 *              Current Thread : scheduling-1
 *          如果我们需要自定义线程池执行话只需要新加一个实现SchedulingConfigurer接口的 configureTasks 的类即可，
 *          这个类需要加上 @Configuration 注解。
 *          通过上面的验证的方式输出当前线程的名字会改变。
 *
 * @ClassName SpringTaskTestConfig
 * @Author xiaojiang
 * @Date 2021/11/15 上午 11:29
 */
@Configuration
public class SpringTaskTestConfig implements SchedulingConfigurer {
    private final int POOL_SIZE = 10;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();

        threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
        threadPoolTaskScheduler.setThreadNamePrefix("my-scheduled-task-pool-");
        threadPoolTaskScheduler.initialize();

        taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
    }
}
